package de.cms.kff.ctrl;

import java.util.Date;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;

import de.cms.kff.dao.MitarbeiterDao;
import de.cms.kff.dao.DaoException;
import de.cms.kff.model.Mitarbeiter;

@Controller
public class MitarbeiterController {
	private static Logger log = Logger.getLogger(MitarbeiterController.class);
	private MitarbeiterDao mitarbeiterDao = null;

	public void setMitarbeiterDao(MitarbeiterDao mitarbeiterDao) {
		this.mitarbeiterDao = mitarbeiterDao;
	}

	/**
	 * <p>
	 * Mitarbeiter form request.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/EditMitarbeiter.html'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/EditMitarbeiter.html", method = RequestMethod.GET)
	public ModelAndView edit(@RequestParam(required = false) Integer id) {
		log.debug("EditMitarbeiter.html");
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		if (id == null) {
			mv.addObject(new Mitarbeiter());
		} else {
			mv.addObject(mitarbeiterDao.findById(id));
		}
		mv.setViewName("edit-mitarbeiter");
		return mv;
	}

	/**
	 * <p>
	 * Saves a mitarbeiter.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/SaveMitarbeiter.html'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/SaveMitarbeiter.html", method = RequestMethod.POST)
	public String save(Mitarbeiter mitarbeiter, Model model) {
		if (mitarbeiter.getCreated() == null) {
			mitarbeiter.setCreated(new Date());
		}
		Mitarbeiter result = mitarbeiterDao.save(mitarbeiter);
		if (mitarbeiter.getId() == null) {
			mitarbeiter.setId(result.getId());
		}
		model.addAttribute("statusMessageKey", "person.form.msg.success");
		return "redirect:AlleMitarbeiter.html";
	}

	/**
	 * <p>
	 * Deletes a mitarbeiter.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/LoescheMitarbeiter.html'.
	 * </p>
	 */
	@RequestMapping(value = "/LoescheMitarbeiter.html", method = RequestMethod.GET)
	public ModelAndView delete(Mitarbeiter mitarbeiter) {
		try {
			mitarbeiterDao.delete(mitarbeiter);
			return new ModelAndView("redirect:AlleMitarbeiter.html");
		} catch (DaoException e) {
			ModelAndView mv = new ModelAndView("error");
			mv.addObject("message", e.getMessage());
			return mv;
		}
	}

	/**
	 * <p>
	 * Searches for all mitarbeiter and returns them in a
	 * <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AlleMitarbeiter.html'.
	 * </p>
	 */
	@RequestMapping(value = "/AlleMitarbeiter.html", method = RequestMethod.GET)
	public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		mv.addObject("title", "Mitarbeiter");
		mv.addObject("message",
				"Folgende Mitarbeiter sind im Unternehmen vorhanden");
		mv.addObject("mitarbeiterList", mitarbeiterDao.findAll());
		mv.setViewName("list-mitarbeiter");
		return mv;
	}

}
